package com.aaa.service.impl;

import com.aaa.dao.UserDao;
import com.aaa.entity.Dept;
import com.aaa.entity.PageSort;
import com.aaa.entity.Userinfo;
import com.aaa.service.UserService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * @author ：Teacher陈（86521760@qq.com）
 * @date ：Created in 2022/6/23 9:36
 * @description：
 * @modified By：
 * @version:
 */
@Service
@EnableScheduling
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;
    /**
     * 查找全部用户，分页+模糊查询+排序
     * @param pageSort
     * @return Page
     */
    @Override
    public  Page findAllUser(PageSort pageSort) {
        // 开始分页
        PageHelper.startPage(pageSort.getPage(), pageSort.getLimit());
        // 分页+模糊查询+排序 查询
        List<Userinfo> userinfoList = userDao.findAllUser(pageSort);
        Page listWithPage = (Page) userinfoList;
        return listWithPage;
    }
    /**
     * 用户名唯一性校验,查找不同名字
     * @param userinfo
     * @return boolean
     */
    @Override
    public boolean findNoSameName(Userinfo userinfo) {
        // 查找不同名字
        List<Userinfo> userinfoList = userDao.findNoSameName(userinfo);
        if (userinfoList != null && userinfoList.size() > 0){
            // 有重名
            return false;
        }
        // 没有相同
        return true;
    }

    /**
     * 添加新用户，同步添加中间表tbl_user_role
     * @param userinfo
     * @return boolean
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean addUser(Userinfo userinfo){
        int num = 0;
        // 添加新用户,并返回主键（即当前添加用户的ID）
        int i = userDao.addUser(userinfo);
        if (i > 0) {
            // 获取用户id
            List<Userinfo> userinfoList = userDao.findUserIdByName(userinfo.getUsername());
            Integer userid = userinfoList.get(0).getUserid();
            // 获取新用户的角色id
            Integer roleId = userinfo.getRoleId();
            // 向中间表tbl_user_role添加相应信息
            System.out.println(userid + "----" + roleId);
            num = userDao.addUserRole(userid, roleId);
        }
        if (num > 0){
            return true;
        }
        return false;
    }

    /**
     * 通过id删除用户（单个和批量通用）(修改状态，不做物理删除)
     * @param userids
     * @return boolean
     */
    @Override
    public boolean deleteUserById(String[] userids) {
        int num = userDao.deleteUserById(userids);
        if (num > 0){
            return true;
        }
        return false;
    }
    /**
     * 重置用户密码
     * @param userinfo
     * @return boolean
     */
    @Override
    public boolean resetPassword(Userinfo userinfo) {
        int num = userDao.resetPassword(userinfo);
        if (num > 0){
            return true;
        }
        return false;
    }
    /**
     * 修改用户信息
     * @param userinfo
     * @return boolean
     */
    @Override
    public boolean updateUser(Userinfo userinfo) {
        int num = userDao.updateUser(userinfo);
        if (num > 0){
            return true;
        }
        return false;
    }


    @Override
    public List<Map<String, Object>> findAllUserInfoByName(Map map) {
        return userDao.findAllUserInfoByName(map);
    }
    /**
     * 获取全部部门
     */
    @Override
    public List<Dept> queryAllDept() {
        return userDao.queryAllDept();
    }
    /**
     * @create by: Fmc
     * @description: 通过session获取用户id并查找个人信息
     * @create time: 2022/6/29 10:06
     * @return: Userinfo
     */
    @Override
    public Userinfo selectById(Integer userid) {
        List<Userinfo> userinfoList = userDao.selectById(userid);
        return userinfoList.get(0);
    }
    /**
     * @create by: Fmc
     * @description: 修改个人信息
     * @create time: 2022/6/29 18:11
     * @return: boolean
     */
    @Override
    public boolean updateOneself(Userinfo userinfo) {
        int num = userDao.updateOneself(userinfo);
        if (num > 0){
            return true;
        }
        return false;
    }
}
